SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO
CREATE PROCEDURE dbo.paCalcularLosPuntajesARecalcular

@Convocatoria INT,
@Nivel INT,
@Ciclo INT

AS
SET NOCOUNT ON
DECLARE @Formula VARCHAR(100)
DECLARE @Concepto INT
DECLARE @Inscripcion INT
DECLARE @Error INT
DECLARE @TipoConvocatoria AS INT

BEGIN TRANSACTION

	-- En el calculo por agentes, si existen calificaciones se borran

	DELETE CI
	FROM tb_Calificacionesdeinscripcion  CI
	INNER JOIN tb_InscripcionesConvocatorias IC ON IC.idinscripcionconvocatoria = CI.inscripcion
	INNER JOIN TB_CONCEPTOSDEPUNTAJE CP ON CP.IDCONCEPTO=CI.CONCEPTO
	WHERE  IC.Convocatoria = @Convocatoria AND IC.Nivel = @Nivel AND IC.Ciclo = @Ciclo  and IC.agente in (57811) AND CONCEPTO in(189,234,235,329)

	DECLARE X CURSOR FOR

	SELECT CP.FormulaPuntaje, CP.IdConcepto, IC.IdInscripcionConvocatoria,CP.TipoConvocatoria
	FROM tb_ConceptosDePuntaje CP INNER JOIN tb_TiposDeConvocatorias TC ON CP.TipoConvocatoria = TC.IdTipoConvocatoria 
	INNER JOIN tb_Convocatorias C ON C.TipoConvocatoria = TC.IdTipoConvocatoria
	INNER JOIN tb_InscripcionesConvocatorias IC ON IC.Convocatoria = C.IdConvocatoria
	WHERE C.IdConvocatoria = @Convocatoria AND IC.Nivel = @Nivel AND IC.Ciclo = @Ciclo AND CP.FormulaPuntaje IS NOT NULL AND IDCONCEPTO=189 and IC.agente in (57811)

	OPEN X

	FETCH NEXT FROM X INTO @Formula, @Concepto, @Inscripcion, @TipoConvocatoria

	WHILE @@FETCH_STATUS = 0 BEGIN
	
		-- Forma el sql dinamico con el llamado al concepto
		DECLARE @temp VARCHAR(8000)
		SELECT @temp = 'DECLARE @Puntaje FLOAT ' + CHAR(10) + 'SET @Puntaje = 0 ' + CHAR(10)
		SELECT @temp = @temp + 'EXEC ' +@Formula + ' ' + CONVERT(VARCHAR, @Inscripcion) + ', @Puntaje OUTPUT, 0' + CHAR(10)
		print @temp
		SELECT @temp = @temp + 'EXEC paAgregarCalificacionesDeInscripcion ' + CONVERT(VARCHAR, @Inscripcion) + ', ' + CONVERT(VARCHAR, @Concepto) + ', @Puntaje'
		print @temp
		-- Ejecuta el sql dinamico
		EXEC(@temp)
		SET @Error = @@ERROR

		IF @Error <> 0 BEGIN
			DECLARE @t VARCHAR(100)
			SET @t = 'PROCEDIMIENTO ' + @Formula
			RAISERROR(@t, 16, 1)
			GOTO Salir
		END

		FETCH NEXT FROM X INTO @Formula, @Concepto, @Inscripcion, @TipoConvocatoria
	END

	CLOSE X
	DEALLOCATE X

	--  COMPLETA EL CONCEPTO PUNTAJE FINAL
if  @TipoConvocatoria = 1 
	BEGIN
		INSERT INTO tb_CalificacionesDeInscripcion(Inscripcion, Concepto, Puntaje)
		SELECT CI.Inscripcion,234, SUM(CI.Puntaje)
		FROM tb_InscripcionesConvocatorias IC INNER JOIN tb_CalificacionesDeInscripcion CI ON IC.IdInscripcionConvocatoria = CI.Inscripcion
		INNER JOIN tb_Agentes A ON A.idAgente = IC.Agente
		WHERE IC.Convocatoria = @Convocatoria  AND CI.Concepto NOT IN(245, 246, 247, 248, 234, 235, 224, 473,331,332,333,334,535,536,537,538,539,540,541,542) AND IC.Nivel = @Nivel AND IC.Ciclo = @Ciclo
		GROUP BY CI.Inscripcion
		SET @Error = @@ERROR
		IF @Error <> 0 GOTO Salir
	END
	if  @TipoConvocatoria = 2 
	BEGIN
		INSERT INTO tb_CalificacionesDeInscripcion(Inscripcion, Concepto, Puntaje)
		SELECT CI.Inscripcion, 329, SUM(CI.Puntaje)
		FROM tb_InscripcionesConvocatorias IC INNER JOIN tb_CalificacionesDeInscripcion CI ON IC.IdInscripcionConvocatoria = CI.Inscripcion
		INNER JOIN tb_Agentes A ON A.idAgente = IC.Agente
		WHERE IC.Convocatoria = @Convocatoria  AND CI.Concepto NOT IN(245, 246, 247, 248, 234, 235, 224, 473,331,332,333,334,535,536,537,538,539,540,541,542) AND IC.Nivel = @Nivel AND IC.Ciclo = @Ciclo
		GROUP BY CI.Inscripcion
		SET @Error = @@ERROR
		IF @Error <> 0 GOTO Salir
	END
	--  COMPLETA EL CONCEPTO PUNTAJE ACRECENTAMINETO
	if  @TipoConvocatoria = 1 
	BEGIN
		INSERT INTO tb_CalificacionesDeInscripcion(Inscripcion, Concepto, Puntaje)
		SELECT CI.Inscripcion, 235, SUM(CI.Puntaje)
		FROM tb_InscripcionesConvocatorias IC INNER JOIN tb_CalificacionesDeInscripcion CI ON IC.IdInscripcionConvocatoria = CI.Inscripcion
		INNER JOIN tb_Agentes A ON A.IdAgente = IC.Agente	
		WHERE IC.Convocatoria = @Convocatoria  AND CI.Concepto NOT IN (245, 246, 247, 248, 234, 235, 191, 224, 473,331,332,333,334,535,536,537,538,539,540,541,542)
		AND IC.Nivel = @Nivel AND IC.Ciclo = @Ciclo
		GROUP BY CI.Inscripcion
		SET @Error = @@ERROR 
		IF @Error <> 0 GOTO Salir
	END
Salir:
IF @Error <> 0
	ROLLBACK TRANSACTION
ELSE
	COMMIT TRANSACTION
GO
GRANT EXECUTE ON  [dbo].[paCalcularLosPuntajesARecalcular] TO [Juntas]
GO
